<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<head>
  <title>Team Synchronizing</title>    
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <link rel="stylesheet" href="http://dev.eclipse.org/default_style.css" type="text/css">
</head>

<body bgcolor="#ffffff" text="#000000">
    
<table border="0" cellspacing="5" cellpadding="2" width="100%">
  <tbody>
    <tr> 
      <td align="left" valign="top" bgcolor="#0080c0"> <b><font color="#ffffff" face="Arial,Helvetica"> 
        Improving the synchronize view - Eclipse 3.0</font></b> </td>
    </tr>
</table>
 
<p>Why change it? Because there were many <a href="https://bugs.eclipse.org/bugs/buglist.cgi?short_desc_type=allwordssubstr&short_desc=Sync%2BView&product=Platform&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&keywords_type=allwords&keywords=&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&namedcmd=All%2BOpen%2BVCM%2BP1P3&newqueryname=&order=Reuse%2Bsame%2Bsort%2Bas%2Blast%2Btime&field0-0-0=noop&type0-0-0=noop&value0-0-0=">open</a> 
  bugs relating to the synchronize view, there was no public API for repository 
  providers to use it, and we felt that we could to better. </p>
<h1>Problems</h1>
<p>In brackets is the 3.0 milestone build where the problem has been addressed.</p>
<p><strong>Structure compare part has many usability problems</strong></p>
        <ol>
          
  <li>The problem is that the things you are interested in (the leaves of the 
    tree) are continually scrolled out of view and separated by a great distance 
    when the tree is expanded, making it hard to see at a glance what has changed. 
    It also makes multi-selection operations very painful, for example comitting 
    a set of related files that should have the same comment. (<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12453">12453</a>, 
    <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16249">16249</a>) [<strong><em>M2</em></strong>] 
  </li>
          <li>There are several also several expansion/selection usability problems 
            with the part. (<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35187">35187</a>, 
            <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33041">33041</a>, 
            <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=4931">4931</a>, 
            <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5431">5431</a>, 
            <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20847">20847</a>, 
            <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27237">27237</a>, 
            <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16249">16249</a>)</li>
          
  <li>Synchronize view modes (filtering) and conflict workflows must be improved 
    (<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10556">10556</a>, <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9451">9451</a>, 
    <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139">139</a>, <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19712">19712</a>) 
    <strong> <em>[M2]</em></strong> </li>
        </ol>
        <p><strong>Finding the outgoing changes requires a long running operation</strong></p>
        <blockquote> 
          
  <p>To commit outgoing changes you have to hit the server. This is really painful 
    since the list of outgoing changes can be determined without considering the 
    remote files. [<strong><em>M2</em></strong>]</p>
        </blockquote>
        <p><strong>Synchronization view doesn't fit with workbench view/editor 
          paradigm</strong></p>
        <blockquote> 
          
  <p>The sync view is essentially an editor and a view combined. Unfortunatly 
    they don't quite work as any other view/editor combination in the workbench.What 
    would happen if we split the structure compare away and made that a view on 
    the sync states of all resources in the workbench and then allowed opening 
    a compare editor (basically the bottom portion) when merging or viewing changes 
    was required? [<strong><em>M2</em></strong>]</p>
        </blockquote>
        <p><strong>Background fetching of remote state</strong></p>
        <blockquote>
          
  <p>Currently when a project is synchronized the complete remote tree is fetched 
    and a progress dialog is shown. The user can't perform any other operation 
    while the remote tree is fetched. There is no reason why this couldn't be 
    fetched in the backgroup without blocking the UI and would allow an awareness 
    of what other people in the team are working on and help reduce the time needed 
    to find out what others are doing. <em><strong>[M2]</strong></em></p>
        </blockquote>
        <p><strong>Java text merge editor isn't real</strong> </p>
        <blockquote>Would like to use <em>real</em> editors for merging instead 
          of the <em>neutered</em> ones currently used. For example, the java 
          editor shown in the sync view looks real (e.g. syntax coloring) but 
          is a scaled down java editor. This causes integration and context problems 
          because it is very useful to try and write code in these editors without 
          resorting to opening the file with the real java editor. Then going 
          back to the sync view only to find that the file hasn't refreshed.</blockquote>
        <p><strong>Compare editors (merge/compare) versus sync view</strong></p>
        <blockquote> 
          
  <p>The terminology and look and feel of the merge editor and sync view is different. 
    Basically a merge is the same as synchronizing except for the fact that you 
    can't commit changes. Merging is already a tricky operation and having a conflicting 
    usage model between the sync and merge makes it even harder. (<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35577">35577</a>) 
    [<strong><em>M2</em></strong>] </p>
        </blockquote>
        <p><strong>Comparison criteria is not well integrated into compare</strong> 
        </p>
        <blockquote> 
          
  <p>The comparison criteria that is used to calculate the sync state is hidden 
    from the user and it isn't obvious for them when the criteria should be changed 
    and what advantage it will have. (<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24887">24887</a>, 
    <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21612">21612</a>, <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28143">28143</a>) 
    <em> <strong>[M3]</strong></em> </p>
        </blockquote>
        <p><strong>[CVS] Synchronizing against an existing project is not well 
          supported</strong> </p>
        <blockquote> 
          <p>This is somewhat of a CVS problem but relates to the more general 
            issue of when to change the comparison criteria. (<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21612">21612)</a></p>
        </blockquote>
<h1>Solution</h1>
<p>In the 3.0 M2 release a new Synchronize view will be made available. Not only 
  does the view look different but synchronization workflows have changed, we 
  hope for the better, based on the feedback that we have received over the last 
  two years. Here is a summary of the features of the new sync view:</p>
        <p><strong>General features</strong></p>
        
<ul>
  <li>The old sync view used to be static, you would synchronize a project(s) 
    and the sync view would display the resources of interest. The new view is 
    dynamic that listens to changes in the workspace and updates the synchronization 
    states of local resources automatically.</li>
  <li>The old sync view would only allow one 'type' of projects to be shown at 
    a time, and switching between them would require a long running operation. 
    For example, if you you were using FTP and CVS you would and only wanted to 
    see your local changes you had to pick the projects and synchronize them seperatly 
    with each provider. Now, both are registered with the sync view and can be 
    toggled quickly.</li>
  <li>Can show the changes in either a table and tree view.</li>
  <li>Instead of embedding the compare views into the sync view, file comparisons 
    are shown in a compare editor. Clean compare editors are re-used so that your 
    editor space is not overloaded and dirty compare editors are left untouched. 
    This switch allows you to have multiple changed compare editors open without 
    being forced to save automatically. This wasn't possible in the old sync view.</li>
  <li>Merges are shown in the sync view. This simplifies the merge actions and 
    allows for merges to be long lived. For example, in CVs wihle working in a 
    branch you can setup to merge the changes in HEAD into your branch. This merge 
    configuration will be saved between sessions and you can easily keep your 
    branch up-to-date with changes in HEAD. When then merge is complete you can 
    Cancel the merge from the views pulldown menu.</li>
  <li>Synchronizations are performed in the background and scheduled refreshes 
    can be configured.</li>
  <li>The changes available in a workspace are shown in the view's title bar. 
    This can help the user be more resources aware and understand if the active 
    filter is filtering out changes.</li>
  <li>There is a Team Synchronizing perspective which helps users who used the 
    sync view as a fast view.</li>
</ul>
        <p><strong>CVS features</strong></p>
        
<ul>
  <li>You can perform any of the Team &gt; CVS operations on the elements in the 
    sync view (e.g. create patch, replace with remote, show history)</li>
  <li>Simpler operations in the sync view. You can update/commit in any mode. 
    The prompts will give you more information about what files will be overwritten.</li>
  <li>CVS merges now appear in the sync view and will be persisted between sessions 
    until the merge is cancelled.</li>
  <li>Team &gt; Synchronize with Repository creates a light weight working set 
    and enables for the sync view. This allows selecting a subset of resources 
    to be shown in the sync view.</li>
</ul>
        <p><strong>Issues</strong></p>
        <ul>
          <li>There are two CVS Update/Commit actions in the context menu. Use 
            those at the first level since the onces under Team won't do the right 
            thing. This will be fixed when UI supports actions override for contexts.</li>
          <li>Revision numbers aren't shown in the compare editor.</li>
          <li>Better multiple selection support</li>
          <li>Support for basic navigator actions (e.g. rename, delete...)</li>
        </ul>
        
<p><strong>Upcomming features</strong></p>
<ul>
  <li>Have the compare editor display the structure diff in an outline window.</li>
  <li>Key bindings for CVS actions</li>
  <li>Object contribution override will be supported so only one Update/Commit 
    will be shown</li>
  <li>FTP and Dav plugins will be migrated to the new sync view.</li>
  <li>It would be cool to have the comment and user name shown for incoming changes</li>
</ul>
<h1><strong>Where to go from here?</strong></h1>
<ul>
  <li>A <a href="#new">prototype</a> has been released with the goal of removing 
    the existing Team &gt; Synchronize actions by the M2 milestone</li>
  <li>Incorporate feedback into new sync view</li>
  <li>Continue to solve the <a href="#issues">issues</a> listed below</li>
  <li>By M3 have ISVs that where using the internal API over to the new public 
    API</li>
</ul>
</body>
</html>
